package com.jprocms.module.cms.service.sysword;

import com.jpro.framework.common.pojo.PageResult;
import com.jprocms.module.cms.controller.admin.sysword.vo.*;
import com.jprocms.module.cms.dal.dataobject.sysword.SysWordDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 词汇管理 Service 接口
 *
 * @author jprocms
 */
public interface SysWordService {

    /**
     * 创建词汇管理
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSysWord(@Valid SysWordCreateReqVO createReqVO);

    /**
     * 更新词汇管理
     *
     * @param updateReqVO 更新信息
     */
    void updateSysWord(@Valid SysWordUpdateReqVO updateReqVO);

    /**
     * 删除词汇管理
     *
     * @param id 编号
     */
    void deleteSysWord(Long id);

    /**
     * 获得词汇管理
     *
     * @param id 编号
     * @return 词汇管理
     */
    SysWordDO getSysWord(Long id);

    /**
     * 获得词汇管理列表
     *
     * @param ids 编号
     * @return 词汇管理列表
     */
    List<SysWordDO> getSysWordList(Collection<Long> ids);

    /**
     * 获得词汇管理分页
     *
     * @param pageReqVO 分页查询
     * @return 词汇管理分页
     */
    PageResult<SysWordDO> getSysWordPage(SysWordPageReqVO pageReqVO);

    /**
     * 获得词汇管理列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 词汇管理列表
     */
    List<SysWordDO> getSysWordList(SysWordExportReqVO exportReqVO);

    /**
     * 批量导入词汇
     *
     * @param importWords     导入列表
     * @param isUpdateSupport 是否支持更新
     * @return 导入结果
     */
    SysWordImportRespVO importWordList(List<SysWordImportExcelVO> importWords, boolean isUpdateSupport, String dictType);

    /**
     * 添加搜索词统计
     *
     * @param searchWords 搜索词
     * @param count       增加计数次数
     * @param siteId
     */
    void addSearchCount(List<String> searchWords, Long count, Long siteId);


    /**
     * 获得文本所包含的不合法的易错词数组
     *
     * @param text 文本
     * @return 不合法的敏感词数组
     */
    List<String> validateText(String text);

    /**
     * 获得文本所包含的不合法的易错词和正确词集合
     *
     * @param text 文本
     * @return 不合法的敏感词数组
     */
    List<SysWordDO> findEasyErrorWordText(String text);

    /**
     * 判断文本是否包含易错词
     *
     * @param text 文本
     * @return 是否包含
     */
    boolean isTextValid(String text);

    /**
     * 查询搜索推荐词
     *
     * @param text 搜索词
     * @return 搜索推荐词
     */
    List<SysWordDO> findSearchSuggest(String text);

    Map<String, String> getKeyWordCache();

}
